#include <QString>
#include <QMap>
#include <QByteArray>

typedef QMap<QString,QByteArray> TParams;

/*!	\class CodecInterface
	\~russian
		\brief Интерфейсный класс для кодеков.
	\~english
		\brief Interface class for codecs.
*/
class CodecInterface
{
public:
	virtual ~CodecInterface() {};

	/*!	\~russian
			Декодирует пакет.
			\param[in] ba - пакет данных.
			\param[in] toServer - true, если пакет предназначался серверу; false, если клиенту.
			\return Отформатированный пакет для отображения на экране.

		\~english
			Decode packet.
			\param[in] ba - data packet.
			\param[in] toServer - true, if packet will be send to server; false otherwise.
			\return Formated string for displaing.
	*/
	virtual QString decode(const QByteArray& ba, const bool toServer) = 0;

	/*!	\~russian
			Кодирует пакет.
			\param[in] str - строка, введённая пользователем.
			\param[in] toServer - true, если пакет отправится серверу; false, если клиенту.
			\return Пакет для отправки.

		\~english
			Encode packet.
			\param[in] str - string from user.
			\param[in] toServer - true, if packet will be send to server; false, otherwise.
			\return Data packet for send.
	*/
	virtual QByteArray encode(const QString& str, const bool toServer) = 0;

	/*!	\~russian
			Возвращает короткое имя кодека для отображения в меню.

		\~english
			Returns short codec name for displaing in menu.
	*/
	virtual QString codecName() = 0;

	/*!
		\~russian
			Возвращает описание кодека для подсказки.

		\~english
			Returns codec's discription for popup hint.
	*/
	virtual QString codecDesc() = 0;

	/*!
		\~russian
			Возвращает текущие настройки кодека. Программа сохраняет их.

		\~english
			Returns codec's current settings. Main program will save it.
	*/
	virtual TParams params() = 0;

	/*!
		\~russian
			Устанавливает заданные настройки кодека, сохранённые программой.

		\~english
			Sets codec's settings.
	*/
	virtual void setParams(TParams& params) = 0;

	/*!
		\~russian
			Показывает окно настройки параметров кодека.

		\~english
			Shows settings dialog window.
	*/
	virtual void showParamsDialog() = 0;

};

Q_DECLARE_INTERFACE(CodecInterface, "com.googlecode.devproxy.CodecInterface/1.0")

// kate: space-indent off; tab-indents on; indent-width 4; indent-mode cstyle;
